#include "RingQueue.hpp"

// 生产者线程
void *produce(void *arg)
{
    // int data = 1;
   /*  int x = 1;
    int y = 1; */

    RingQueue<int> *rq = (RingQueue<int> *)arg;
    int n = 1; 
    while (1)
    {
        //sleep(1);        
        std::cout << "我是生产者, 生产了一个任务数据: "  << n << std::endl;
        rq->enqueue(n++);
    }
}

// 消费者线程
void *consume(void *arg)
{
    RingQueue<int> *rq = (RingQueue<int> *)arg;
    while (1)
    {
        sleep(1);
        int n = 0;
        rq->dequeue(&n);
        std::cout << std::endl;
        std::cout << "我是消费者, 消费了一个任务数据: " << n <<std::endl;
    }
}

int main()
{
    // 创建阻塞队列
    RingQueue<int> *rq = new RingQueue<int>(5);

    // 创建生产者、消费者线程
    pthread_t producer, consumer;
    pthread_create(&producer, NULL, produce, rq); // 创建生产者线程
    pthread_create(&consumer, NULL, consume, rq); // 创建消费者线程

    // 等待线程退出
    pthread_join(producer, NULL);
    pthread_join(consumer, NULL);

    return 0;
}